#ifndef EXPERIMENT_H
#define EXPERIMENT_H

#include "analytedatabase.h"
#include "expsample.h"

class Experiment
{
public:
    Experiment();

    bool SetFilePath(QString filePath);
    QString GetFilePath();

    bool SetAnalyteDataBase(AnalyteDataBase data);
    AnalyteDataBase *GetAnalyteDataBase();

    bool SetMassCalStandard();
    CalRatio GetMassCalStandard();

    bool SetMassCalHigh();
    CalRatio GetMassCalHigh();

    bool SetCrossCal();
    CalRatio GetCrossCal();

    bool EnableTune(bool);
    bool IsUsedTune();

    bool SetExpConllectPara();
    ExpConllectPara *GetExpConllectParaPtr();
    bool SetExtractionTime();
    ExtractionTime *GetExtractionTimePtr();

    ExpMethod *GetExpMethodPtr();
    ExpMethod GetExpMethod();

    IsotopePara *GetIsotopeParaPtr();

    TuneResult *GetTuneResult();
    
    ExpSample *GetExpSamplePtr();
    ExpSample GetExpSample();

    void ClearResult();
    int IsFinished();

    QMap<double,QString> GetQuantitativeElement(int type);//type 0:内标 1：无 2：全定量 3:标准加入
    bool GetScanPara(QList<ScanPara> &scanParas,int type);
    int GetScanPosition(QList<ScanPara> scanParas,QString name);
    int GetScanPosition(QList<ScanPara> scanParas,double name);

    void DoCnCal();
    void DoCpsCal();
    void DoCpsJamming();
    void DoIsotope();
    void DoRsdCnCal();
    void DoRsdCpsCal();
    void DoRsdCpsJamming();
    void DoRsdIsotope();

    void CalStandardPara();
    void CalQuantitativePara(QString name);//计算误差...（暂时界面处理）internal
    void CalCpsInternals();//
    void CalStandardCurve(QString name);
    void Analyzed();

    friend QDataStream & operator<< ( QDataStream & stream, const Experiment & experiment );
    friend QDataStream &	operator>> ( QDataStream & stream, Experiment & experiment );

private:
    CalRatio massCalStandard;//[5] 标准：质量校正系数（内部存储一组数据，界面显示文件夹结果）
    CalRatio massCalHigh;//高标：
    CalRatio crossCal;//[5] 交叉校正系数（内部存储一组数据，界面显示文件夹结果）
    TuneResult tuneResult;//仪器参数：调谐参数 （内部存储一组数据，界面显示文件夹结果）
    bool bIsUsedTune;//true：使用调谐 false：不用调谐

    ExpConllectPara expConllectPara;//采集参数 元素无关量
    ExtractionTime extractionTime;//提取时间

    AnalyteDataBase analyteDataBase;//分析元素
    IsotopePara isotopePara;//同位素  
    ExpMethod expMethod;//采集方法:元素定义 内标 定量方法 (QString:选中元素)\\QC
    ExpSample expSample;//样品序列表 (QString:序号) 关联采集方法、QC、结果

    QString filePath;//temp
    //Algorithm 计算结果
};
//元素库 采集方法 样品及结果 质控，分开定义
#endif // EXPERIMENT_H
